MAF1731 - Microstructure and Trading Systems

María Fernanada Amador Alvarez

Guillermo González Gutiérrez

Marzo 2023 | Repository: Link

Módulo 4¶

Microestructura del mercado

1. Introducción.¶

En este laboratorio usaremos información del Libro de Ordenes de Criptomonedas de diversos exchanges internacionales, con el objetivo primario de visualizar y modelar la microestructura del mercado por medio del comportamiento de Libro de Ordenes y sus caracteristicas como; Matching Engine, Levels, Ask-Bid Volumes, etc.

El modelo de Roll, el cual se enfoca en la microestructura de la dinámica del precio de un activo financiero en horizontes de tiempo en minutos o segundos. El modelo distingue entre las componentes del precio debido al valor fundamental del activo financiero y a aquellas atribuibles a la organización del mercado y procesos de trading. El modelo tiene dos parámetros, C y σ2u, que pueden ser estimados con la información de la varianza y autocovarianza de primer orden del cambio de los precios 4Pt. Se presentan las ecuaciones del modelo para modelar el valor fundamental del activo financiero y para modelar el precio de transacción del mismo activo, y se muestran los cálculos para la diferencia de precios 4Pt, la diferencia de precios 4Pt-1, la multiplicación de las diferencias de precios (4Pt4Pt-1), la varianza de 4Pt, y la covarianza de 4Pt-1 y 4Pt. Los parámetros finales del modelo de Roll se despejan en términos de γ0 y γ1, y quedan expresados como: γ0 = 2C2 + σ2u, σ2u = γ0 - 2C2, γ1 = -C2, y C = -√γ1.

Mientras que la Teoría de Valuación de activos como marco para modelar el precio de un activo financiero riesgoso como un flujo de pagos. Se presenta un modelo simple de utilidad a un período futuro para expresar el valor en el tiempo t de un pago x en t+1. Se utiliza la función de utilidad y se plantea el problema de optimización de la función de utilidad del agente respecto al número de acciones a consumir con restricciones para ct y ct+1. Se obtiene la ecuación que representa el precio del activo riesgoso, Pt, como un proceso estocástico particular, una martingala. Se concluye que el precio del activo riesgoso puede ser modelado como un flujo de pagos.

1.1 Objetivos:¶

Visualización de microestructuras con libros de órdenes de exchanges que contengan:

  • Levels
  • Bid Volume
  • Ask Volume
  • Total Value
  • Mid Price
  • VWAP

2. Install/Load Packages and Dependencies¶

In [ ]:
import functions as fn
import data as dt
import visualizations
import pandas as pd
import numpy as np
import ccxt
import plotly.io as pio

2.1 Files Dependencies¶

Utilizar el módulo CCXT en python para consumir el libro de ordenes de los activos necesarios por cada uno de los exchanges especificados

Ordenes de libros guardados en csv:

Orderbooks1:

- kucoin, bittrex, bitfinex (ETH/BTC)

Orderbooks2:

- kucoin, bittrex, bitfinex (BTC/USDT)

3. Data Visualization¶

In [ ]:
# (ETH/BTC)
files_etc = pd.read_csv('files/orderbooks1.csv')
files_etc
Out[ ]:
exchange datetime orderbook
0 kucoin 2023-04-24T17:04:02.574Z {'ask_size': [1.0874998, 0.3672999, 1.5, 1.5, ...
1 kucoin 2023-04-24T17:04:02.920Z {'ask_size': [1.0874998, 0.3672999, 1.5, 1.5, ...
2 kucoin 2023-04-24T17:04:03.197Z {'ask_size': [1.0874998, 0.3672999, 1.5, 1.5, ...
3 kucoin 2023-04-24T17:04:03.541Z {'ask_size': [1.0874998, 1.8672999, 0.6, 1.5, ...
4 kucoin 2023-04-24T17:04:03.816Z {'ask_size': [1.0874998, 0.3672999, 1.5, 0.6, ...
... ... ... ...
18522 bitfinex 2023-04-24T18:03:56.345Z {'ask_size': [0.5, 1.31704302, 0.5, 1.22561471...
18523 bitfinex 2023-04-24T18:03:57.136Z {'ask_size': [0.5, 1.31704302, 0.5, 1.22561471...
18524 bitfinex 2023-04-24T18:03:57.832Z {'ask_size': [0.5, 1.31704302, 0.5, 1.22561471...
18525 bitfinex 2023-04-24T18:03:59.032Z {'ask_size': [3.82768498, 0.5, 1.31704302, 3.8...
18526 bitfinex 2023-04-24T18:03:59.723Z {'ask_size': [3.82768498, 0.5, 1.31704302, 3.8...

18527 rows × 3 columns

In [ ]:
# (BTC/USDT)
files_btc = pd.read_csv('files/orderbooks2.csv')
files_btc
Out[ ]:
exchange datetime orderbook
0 kucoin 2023-04-24T18:04:05.442Z {'ask_size': [1.76519273, 0.05477487, 0.101045...
1 kucoin 2023-04-24T18:04:05.719Z {'ask_size': [1.76519273, 0.05477487, 0.101045...
2 kucoin 2023-04-24T18:04:05.998Z {'ask_size': [1.76369245, 0.05477487, 0.101045...
3 kucoin 2023-04-24T18:04:06.371Z {'ask_size': [2.32371788, 0.07302856, 0.101045...
4 kucoin 2023-04-24T18:04:06.671Z {'ask_size': [2.32487898, 0.07302856, 0.101045...
... ... ... ...
18603 bitfinex 2023-04-24T19:04:00.224Z {'ask_size': [0.128048, 0.0887, 0.06, 0.128035...
18604 bitfinex 2023-04-24T19:04:00.922Z {'ask_size': [0.128048, 0.0887, 0.06, 0.128035...
18605 bitfinex 2023-04-24T19:04:02.094Z {'ask_size': [0.128048, 0.227238, 0.18728997, ...
18606 bitfinex 2023-04-24T19:04:02.800Z {'ask_size': [0.128048, 0.227238, 0.18728997, ...
18607 bitfinex 2023-04-24T19:04:03.536Z {'ask_size': [0.128048, 0.227238, 0.18728997, ...

18608 rows × 3 columns

4. Visualization¶

In [ ]:
# (ETH/BTC)
series_de_tiempo_1 = fn.OB_ts(pd.read_csv('files/orderbooks1.csv'))
In [ ]:
# (BTC/USDT)
series_de_tiempo_2 = fn.OB_ts(pd.read_csv('files/orderbooks2.csv'))
In [ ]:
# (ETH/BTC)
series_de_tiempo_1.sample(15)
Out[ ]:
exchange timeStamp level Ask_Volume Bid_Volume Total_Volume Mid_Price VWAP Spread
7357 kucoin 2023-04-24T17:42:26.570Z 200 128.739804 94.287752 223.027556 0.067032 0.100616 0.00025
1988 kucoin 2023-04-24T17:14:22.530Z 200 103.890571 126.398825 230.289396 0.066921 0.100437 0.000263
1760 kucoin 2023-04-24T17:13:12.278Z 200 106.592526 133.904534 240.49706 0.066909 0.100415 0.000262
14220 bitfinex 2023-04-24T17:07:56.303Z 50 79.840378 38.858004 118.698382 0.066972 0.100479 0.000072
611 kucoin 2023-04-24T17:07:15.683Z 200 108.619836 119.606719 228.226555 0.066946 0.100472 0.000267
18411 bitfinex 2023-04-24T18:02:27.862Z 50 96.719327 56.34665 153.065977 0.066988 0.100495 0.000048
15292 bitfinex 2023-04-24T17:21:50.846Z 50 77.407435 77.078699 154.486134 0.066868 0.100317 0.00006
15693 bitfinex 2023-04-24T17:27:07.175Z 50 71.027633 57.370576 128.398209 0.066962 0.100457 0.000048
3584 kucoin 2023-04-24T17:22:43.990Z 200 90.11977 125.880115 215.999885 0.066925 0.100428 0.000282
2805 kucoin 2023-04-24T17:18:38.431Z 200 97.983883 136.611483 234.595366 0.066915 0.100423 0.00026
17903 bitfinex 2023-04-24T17:55:55.366Z 50 71.444473 57.920226 129.364699 0.06699 0.1005 0.000052
4982 kucoin 2023-04-24T17:30:05.105Z 200 80.258473 139.473858 219.732331 0.06696 0.1005 0.000264
15258 bitfinex 2023-04-24T17:21:23.616Z 50 123.859662 75.072369 198.932031 0.066869 0.100321 0.000068
8808 kucoin 2023-04-24T17:49:22.072Z 200 109.927421 115.853856 225.781277 0.066974 0.100514 0.000249
7418 kucoin 2023-04-24T17:42:44.603Z 200 125.942876 105.494186 231.437062 0.067028 0.100608 0.000246
In [ ]:
# (BTC/USDT)
series_de_tiempo_2.sample(15)
Out[ ]:
exchange timeStamp level Ask_Volume Bid_Volume Total_Volume Mid_Price VWAP Spread
13804 bittrex 2023-04-24T18:55:44.355Z 50 1.780207 3.634274 5.414481 27356.531985 41132.256004 834.250516
6588 kucoin 2023-04-24T18:36:59.283Z 200 28.037485 58.859869 86.897354 27384.1915 41089.248063 42.725
10529 kucoin 2023-04-24T18:56:57.961Z 200 54.694987 40.810199 95.505186 27337.823 41019.434697 47.936
10620 kucoin 2023-04-24T18:57:24.963Z 200 55.790578 40.261441 96.05202 27342.302 41026.272241 45.738
3261 kucoin 2023-04-24T18:20:04.815Z 200 54.266432 45.515898 99.78233 27414.5135 41136.74716 47.353
556 kucoin 2023-04-24T18:06:55.942Z 200 66.685915 32.657519 99.343434 27367.3315 41065.078166 53.205
6312 kucoin 2023-04-24T18:35:38.789Z 200 29.333641 41.340442 70.674083 27377.427 41076.773433 37.47
6852 kucoin 2023-04-24T18:38:17.296Z 200 25.994028 59.068 85.062028 27359.8845 41053.892731 39.041
13460 bittrex 2023-04-24T18:46:00.874Z 50 1.991035 3.701348 5.692383 27330.294477 41065.387844 748.342764
1197 kucoin 2023-04-24T18:10:06.745Z 200 54.970369 35.996532 90.966901 27367.9545 41065.039855 47.209
16245 bitfinex 2023-04-24T18:32:56.629Z 50 9.949764 17.328731 27.278495 27407.72 41121.590711 37.04
8151 kucoin 2023-04-24T18:44:47.116Z 200 28.213799 59.870824 88.084624 27325.1465 40999.400987 50.791
13712 bittrex 2023-04-24T18:53:09.833Z 50 1.788149 3.537587 5.325736 27341.581526 41119.211701 805.651028
12134 bittrex 2023-04-24T18:08:41.225Z 50 2.432396 3.582965 6.015361 27332.67477 41130.470358 881.972048
403 kucoin 2023-04-24T18:06:09.195Z 200 48.631739 30.58671 79.218449 27376.576 41076.313433 40.786

5. Modelado de Microestructura¶

In [ ]:
# (ETH/BTC)
microestructura_1 = fn.micro_modelling(series_de_tiempo_1)
In [ ]:
# (BTC/USDT)
microestructura_2 = fn.micro_modelling(series_de_tiempo_2)
In [ ]:
# (ETH/BTC)
microestructura_1.sample(15)
Out[ ]:
Close Spread Effective Spread
timeStamp
2023-04-24T17:18:58.093Z 0.06689 0.000068 0.000011
2023-04-24T17:09:48.049Z 0.066951 0.000068 0.000054
2023-04-24T17:54:29.576Z 0.06697 0.000247 0.000002
2023-04-24T17:50:54.355Z 0.066983 0.000248 0.000001
2023-04-24T17:35:28.523Z 0.06698 0.000249 0.000004
2023-04-24T17:08:40.266Z 0.066928 0.000255 0.000008
2023-04-24T17:14:54.582Z 0.066933 0.000257 0.000005
2023-04-24T17:42:42.934Z 0.067061 0.000064 0.000015
2023-04-24T17:24:50.770Z 0.066904 0.000239 0.000007
2023-04-24T17:22:28.216Z 0.066896 0.000261 0.000005
2023-04-24T17:48:45.516Z 0.066991 0.00025 0.000003
2023-04-24T17:20:42.184Z 0.066855 0.00006 0.000009
2023-04-24T17:24:23.279Z 0.066909 0.000258 0.000006
2023-04-24T17:43:38.885Z 0.067438 0.001432 0.000012
2023-04-24T17:31:44.679Z 0.066949 0.000255 0.000006
In [ ]:
# (BTC/USDT)
microestructura_2.sample(15)
Out[ ]:
Close Spread Effective Spread
timeStamp
2023-04-24T18:24:39.850Z 27491.8425 51.009 22.174022
2023-04-24T18:08:06.443Z 27357.733 53.984 8.638551
2023-04-24T18:53:56.853Z 27339.449 43.934 2.176915
2023-04-24T18:16:49.907Z 27354.8375 45.797 2.758821
2023-04-24T18:27:43.447Z 27472.1235 36.581 2.460089
2023-04-24T18:11:51.190Z 27361.594 49.428 6.324842
2023-04-24T18:19:13.455Z 27425.1 36.76 2.106118
2023-04-24T18:13:52.899Z 27371.5105 41.859 4.791754
2023-04-24T18:40:49.323Z 27370.18 37.32 7.105551
2023-04-24T19:03:13.121Z 27333.1 30.92 1.776467
2023-04-24T18:29:36.011Z 27456.28 35.2 8.571180
2023-04-24T18:42:43.336Z 27385.556555 849.546964 4.931479
2023-04-24T18:21:50.994Z 27476.149 44.348 9.382702
2023-04-24T18:17:41.019Z 27373.1775 44.147 2.098667
2023-04-24T18:58:34.348Z 27378.477239 788.676504 8.019090

6. Times Series Visualization¶

In [ ]:
facetas_sdt_1 = visualizations.timeseries_facet_plot(series_de_tiempo_1)
facetas_sdt_1.show(renderer = 'notebook')
In [ ]:
facetas_sdt_2 = visualizations.timeseries_facet_plot(series_de_tiempo_2)
facetas_sdt_2.show(renderer = 'notebook')

7. Conclusiones¶

Fernanda Amador

En primer lugar, es emocionante ver cómo la tecnología ha hecho posible el acceso y análisis de datos de múltiples exchanges de cryptomonedas en tiempo real. Esto es un gran avance en la modelización de microestructura y sistemas de trading, y es fascinante ver cómo se puede utilizar el libro de órdenes para entender el comportamiento del mercado.

En cuanto a los conceptos que has aprendido, es evidente que los niveles del libro de órdenes, el volumen, bid, ask y spread son fundamentales para entender cómo se mueve el mercado y cómo se pueden realizar estrategias de trading. La comprensión del spread efectivo también es crucial para calcular los costos de transacción y determinar la rentabilidad de las operaciones.

Además, es notable cómo la biblioteca pandas de Python es una herramienta poderosa para el análisis de datos en el contexto de la microestructura del mercado y el trading de cryptomonedas. La capacidad de manipular grandes cantidades de datos y visualizarlos de manera efectiva es esencial para la toma de decisiones informadas en el trading.

En conclusión, el modelado de microestructura y sistemas de trading utilizando el libro de órdenes de los exchanges de cryptomonedas es una tarea desafiante pero extremadamente valiosa. A través del uso de Python y bibliotecas como pandas y ccxt, se pueden obtener valiosos conocimientos sobre el comportamiento del mercado y realizar operaciones con mayor confianza y éxito.

Guillermo González

Para cerrar el laboratorio, me gustaría resaltar la importancia acerca del uso del libro de órdenes para modelar la dinámica del mercado. Al hacerlo, se pueden identificar patrones y tendencias que pueden ayudar a los inversores y traders a tomar decisiones informadas sobre cuándo comprar o vender un activo. Además, este tipo de modelado también puede ayudar a los reguladores a entender mejor cómo funciona el mercado y cómo pueden implementar políticas que promuevan una mayor estabilidad y transparencia en el mercado.

Como complemento a lo anterior, quiero hacer énfasis en que los resultados obtenidos toman sentido gracias a la utilización de recursos como python y sus librerías, debido a que muchos modelos financieros podrían quedarse en la teoría, y no son realmente comprendidos hasta que lo aplicas en un ejemplo práctico; una vez aplicado, demuestras los resultados mediante un conjunto de gráficos que redondean y concluyen de una manera más clara lo que se planteó.

Finalmente, es interesante encontrar cómo es que algo tan "básico" como el libro de órdenes, cuando lo analizas en una gran escala de tiempo para que tenga resultados significativos, puede convertirse en una herramienta de mucha utilidad para modelar el comportamiento del mercado

8. Fuentes¶

  • Valencia, D. C., Ruiz, N. R., & Arias, A. V. (2018). Microestructura de mercados como determinante de la tasa de cambio: Seguimiento Bibliométrico. Revista Venezolana de Gerencia, 23(81), 202-216.

  • Madhavan, A. N. (2002). VWAP strategies. Trading, 2002(1), 32-39.